#include "./error.h"
extern "C" {
#include <libavutil/error.h>
}
#include <SDL2/SDL_error.h>
#include <mutex>
#include <QDebug>

static std::mutex logMutex;

void debug(const QString &msg) {
    std::unique_lock<std::mutex> lock(logMutex);
    qDebug() << msg;
}

static QString make_FFmpegErr(const char *info, int ec) {
    if (ec == 0) {
        return QString::asprintf("FFmpeg:%s", info);
    }
    char buf[ AV_ERROR_MAX_STRING_SIZE ];
    av_strerror(ec, buf, AV_ERROR_MAX_STRING_SIZE);
    return QString::asprintf("FFmpeg:%s=>%s", info, buf);
}

static QString make_SDLErr(const char *info) {
    return QString::asprintf("SDL:%s=>%s", info, SDL_GetError());
}

BaseException::BaseException(const QString &msg) : m_msg(msg) {

}

const char *BaseException::what() const {
    return m_msg.toLatin1().constData();
}


FFmpegException::FFmpegException(const char *info, int ec) :
    BaseException( make_FFmpegErr(info, ec) )
{

}

SDLException::SDLException(const char *info) :
    BaseException( make_SDLErr(info) )
{

}















